<?php
include 'header.html';
include 'config.php';  // Spajanje na bazu "elektronalog"

// ========== Funkcija za +1 (FA-###/2025) i dohvat zadnjeg broja ==========
function povecajBrojFakture($docNumber) {
    // Pretpostavimo format "FA-001/2025"
    if (preg_match('/^(FA-)(\d+)(\/\d+)$/', $docNumber, $m)) {
        $broj = (int)$m[2];
        $broj++;
        $brojTekst = str_pad($broj, 3, "0", STR_PAD_LEFT); // npr. 1 -> "002"
        return $m[1] . $brojTekst . $m[3]; // npr. "FA-002/2025"
    }
    return $docNumber;
}

// Dohvati zadnji doc_number iz document_header gdje je document_type_id=1 (Faktura)
$zadnjiBroj = "FA-001/2025"; // default ako nema nijedne fakture
$sqlMax = "SELECT doc_number FROM document_header WHERE document_type_id = 1 ORDER BY id DESC LIMIT 1";
$resMax = $conn->query($sqlMax);
if ($resMax && $resMax->num_rows > 0) {
    $rowMax = $resMax->fetch_assoc();
    $zadnjiBroj = $rowMax['doc_number'];
}
$noviBrojFakture = povecajBrojFakture($zadnjiBroj);

// ========== 2) Dohvati potrebne podatke iz baze ==========

// 2.1) Načini plaćanja
$nacinPlacanja = [];
$sql1 = "SELECT id_placanja, naziv_placanja FROM nacin_placanja";
if ($res1 = $conn->query($sql1)) {
    while($row = $res1->fetch_assoc()){
        $nacinPlacanja[] = $row;
    }
}

// 2.2) Klijenti
$klijenti = [];
$sql2 = "SELECT sifra, naziv_klijenta FROM klijenti";
if ($res2 = $conn->query($sql2)) {
    while($row = $res2->fetch_assoc()){
        $klijenti[] = $row;
    }
}

// 2.3) Grupe artikala
$grupeArtikala = [];
$sql3 = "SELECT id_grupe, naziv_grupe FROM grupa_artikala";
if ($res3 = $conn->query($sql3)) {
    while($row = $res3->fetch_assoc()){
        $grupeArtikala[] = $row;
    }
}

// 2.4) Artikli
$artikli = [];
$sql4 = "SELECT sifra_artikla, naziv_artikla, jed_mjere, cijena, id_grupe FROM artikli";
if ($res4 = $conn->query($sql4)) {
    while($row = $res4->fetch_assoc()){
        $artikli[] = $row;
    }
}

// 2.5) Usluge
$usluge = [];
$sql5 = "SELECT id_usluge, naziv_usluge, jed_mjere, cijena FROM usluge";
if ($res5 = $conn->query($sql5)) {
    while($row = $res5->fetch_assoc()){
        $usluge[] = $row;
    }
}
?>

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Nova Faktura</title>
  <style>
    .flex-container {
      display: flex; 
      justify-content: space-between;
      margin-bottom: 10px;
    }
    .box {
      border: 1px solid #ccc; 
      padding: 10px; 
      width: 48%;
    }
    table { border-collapse: collapse; }
    th, td { padding: 4px; }
  </style>
</head>
<body onload="initData()">
<div style="text-align: center; margin: 40px 0;">
    <a href="index.php" style="display: inline-block; padding: 15px 30px; background: #27ae60; color: white; text-decoration: none; border-radius: 8px; box-shadow: 0 3px 6px rgba(0,0,0,0.16);">
        ← Vratite se na početnu
    </a>
</div>
<h2>Unos nove FAKTURE</h2>

<form method="post" action="spremi_fakturu.php" id="otpremnicaForm">
  <!-- Gornji dio ekrana podijeljen na lijevi i desni dio -->
  <div class="flex-container">
    <!-- Lijeva kutija: KUPAC -->
    <div class="box">
      <h4>KUPAC</h4>
      <label for="client_id">Odaberite kupca:</label><br>
      <select name="client_id" id="client_id" style="width:80%;">
         <option value="">-- Odaberi kupca --</option>
         <?php foreach($klijenti as $kl): ?>
           <option value="<?php echo $kl['sifra']; ?>">
             <?php echo htmlspecialchars($kl['naziv_klijenta']); ?>
           </option>
         <?php endforeach; ?>
      </select>
      <hr>
      <h4>GRUPA ARTIKALA (opcionalno)</h4>
      <select id="grupa_artikala">
         <option value="">-- Grupa --</option>
         <?php foreach($grupeArtikala as $g): ?>
           <option value="<?php echo $g['id_grupe']; ?>">
             <?php echo htmlspecialchars($g['naziv_grupe']); ?>
           </option>
         <?php endforeach; ?>
      </select>
    </div>
    <!-- Desna kutija: FAKTURA BROJ, DATUM, NAČIN PLAĆANJA, VALUTA, BROJ FISKALNOG RAČUNA -->
    <div class="box">
      <label>FAKTURA BR.:</label><br>
      <input type="text" name="doc_number" id="doc_number" 
             value="<?php echo htmlspecialchars($noviBrojFakture); ?>" 
             style="width:60%;" readonly /><br><br>
      <label>Datum fakture:</label><br>
      <input type="date" name="doc_date" id="doc_date" value="<?php echo date('Y-m-d');?>" 
             onchange="izracunajValutuDospijeca()" style="width:60%;" /><br><br>
      <label>Način plaćanja:</label><br>
      <select name="nacin_placanja" id="nacin_placanja" style="width:60%;">
         <option value="">-- Odaberi način --</option>
         <?php foreach($nacinPlacanja as $np): ?>
           <option value="<?php echo $np['naziv_placanja']; ?>">
             <?php echo htmlspecialchars($np['naziv_placanja']); ?>
           </option>
         <?php endforeach; ?>
      </select><br><br>
      <label>Valuta plaćanja (broj dana):</label><br>
      <input type="number" name="valuta_placanja" id="valuta_placanja" value="15" 
             oninput="izracunajValutuDospijeca()" style="width:60%;" /><br><br>
      <label>Valuta dospijeća:</label><br>
      <input type="date" name="valuta_dospijeca" id="valuta_dospijeca" readonly 
             style="width:60%;" /><br><br>
      <label>Broj fiskalnog računa:</label><br>
      <input type="text" name="broj_fiskalnog_racuna" id="broj_fiskalnog_racuna" 
             style="width:60%;" />
    </div>
  </div>

  <hr>

  <!-- Tabela stavki -->
  <table id="stavkeTable" border="1" cellpadding="5" cellspacing="0" width="100%">
    <thead>
      <tr>
        <th>Rb.</th>
        <th>Šifra</th>
        <th>Naziv</th>
        <th>J/M</th>
        <th>Cijena bez PDV</th>
        <th>Cijena s PDV</th>
        <th>PDV%</th>
        <th>Količina</th>
        <th>Rabat%</th>
        <th>Iznos rabata</th>
        <th>Ukupno bez PDV</th>
        <th>Ukupan PDV</th>
        <th>Ukupno s PDV</th>
        <th>Obriši</th>
      </tr>
    </thead>
    <tbody>
      <!-- Dinamički redovi stavki -->
    </tbody>
  </table>
  <br>
  <button type="button" onclick="dodajStavkuArtikal()">+ Dodaj artikal</button>
  <button type="button" onclick="dodajStavkuUsluga()">+ Dodaj uslugu</button>

  <hr>

  <!-- Rekapitulacije -->
  <div style="float:left; width:45%;">
      <h4>Rekapitulacija (lijeva strana)</h4>
      <table border="1" cellpadding="5" cellspacing="0" id="rekapLevoTable" width="100%">
          <thead>
              <tr>
                  <th>Klasa / P.stopa</th>
                  <th>Ukupno</th>
                  <th>Porez</th>
                  <th>Osnovica</th>
              </tr>
          </thead>
          <tbody>
          </tbody>
      </table>
      <br>
      <label>Iznos u slovima:</label><br>
      <textarea name="iznos_slovima" id="iznos_slovima" rows="2" cols="40"></textarea>
      <br><br>
      <label>Napomena:</label><br>
      <select name="note" id="note" style="width:80%;">
         <option value="">-- Bez napomene --</option>
         <option value="Napomena 1: Molimo platiti u roku...">Napomena 1: Molimo platiti u roku...</option>
         <option value="Napomena 2: U slučaju kašnjenja zaračunavamo zatezne kamate.">Napomena 2: U slučaju kašnjenja zaračunavamo zatezne kamate.</option>
         <option value="Napomena 3: Reklamacije primamo u roku 48 sati.">Napomena 3: Reklamacije primamo u roku 48 sati.</option>
      </select>
  </div>

  <div style="float:right; width:50%;">
      <h4>Rekapitulacija (desna strana)</h4>
      <table border="1" cellpadding="5" cellspacing="0">
          <tr>
              <td>Ukupno bez PDV:</td>
              <td><input type="text" readonly id="ukupnoBezPDV" style="width:100px;"></td>
          </tr>
          <tr>
              <td>RABAT:</td>
              <td><input type="text" readonly id="ukupniRabat" style="width:100px;"></td>
          </tr>
          <tr>
              <td>Iznos sa rabatom bez PDV:</td>
              <td><input type="text" readonly id="iznosSaRabatomBezPDV" style="width:100px;"></td>
          </tr>
          <tr>
              <td>Uračunat PDV:</td>
              <td><input type="text" readonly id="ukupniPDV" style="width:100px;"></td>
          </tr>
          <tr>
              <td>Ukupna cijena sa PDV:</td>
              <td><input type="text" readonly id="ukupnoSaPDV" style="width:100px;"></td>
          </tr>
          <tr>
              <td><b>UKUPNA IZNOS ZA NAPLATU:</b></td>
              <td><input type="text" readonly id="ukupnoZaNaplatu" style="width:100px; font-weight:bold;"></td>
          </tr>
      </table>
  </div>
  <div style="clear:both;"></div>

  <br><br>

  <!-- Potpisi -->
  <table width="100%">
      <tr>
          <td width="33%" align="center">
              <label>Fakturisao</label><br><br>____________
          </td>
          <td width="33%" align="center">
              <label>Primio</label><br><br>____________
          </td>
          <td width="33%" align="center">
              <label>Odgovorna osoba</label><br><br>____________
          </td>
      </tr>
  </table>

  <br>
  <input type="submit" value="Sačuvaj fakturu">
</form>

<script>
// Pretvaramo PHP nizove u JS array-e
let artikliJS = <?php echo json_encode($artikli, JSON_HEX_TAG|JSON_UNESCAPED_UNICODE); ?>;
let uslugeJS =  <?php echo json_encode($usluge, JSON_HEX_TAG|JSON_UNESCAPED_UNICODE); ?>;
let redniBroj = 0;

function initData(){
   izracunajValutuDospijeca();
}

// Računanje Valuta dospijeća = Datum fakture + Valuta plaćanja (dani)
function izracunajValutuDospijeca(){
   let datFakt = document.getElementById('doc_date').value; 
   let valDani = parseInt(document.getElementById('valuta_placanja').value) || 0;
   if(!datFakt) return;
   let d = new Date(datFakt + "T00:00:00");
   d.setDate(d.getDate() + valDani);
   let yyyy = d.getFullYear();
   let mm = ("0" + (d.getMonth()+1)).slice(-2);
   let dd = ("0" + d.getDate()).slice(-2);
   let iso = yyyy + "-" + mm + "-" + dd;
   document.getElementById('valuta_dospijeca').value = iso;
}

// Dodaj STAVKU ARTIKAL
function dodajStavkuArtikal(){
   redniBroj++;
   let grupaId = document.getElementById('grupa_artikala').value;
   let selectHTML = `<select onchange="promjenaArtikla(this)" style="width:140px;">
                        <option value="">--Izaberi Artikal--</option>`;
   artikliJS.forEach((a) => {
       if(!grupaId || a.id_grupe == grupaId){
           selectHTML += `<option value="${a.sifra_artikla}" data-naziv="${a.naziv_artikla}" data-jm="${a.jed_mjere}" data-cijena="${a.cijena}">${a.naziv_artikla}</option>`;
       }
   });
   selectHTML += '</select>';
   let tbody = document.getElementById('stavkeTable').querySelector('tbody');
   let tr = document.createElement('tr');
   tr.innerHTML = `
     <td><input type="text" value="${redniBroj}" size="2" readonly></td>
     <td class="tdSifra"><input type="text" name="sifra[]" size="8" readonly></td>
     <td class="tdNaziv">${selectHTML}</td>
     <td class="tdJM"><input type="text" name="jm[]" value="" size="4" readonly></td>
     <td><input type="number" step="0.01" name="cijenaBezPDV[]" value="0" oninput="izracunajRow(this)" style="width:80px;"></td>
     <td><input type="number" step="0.01" name="cijenaSaPDV[]" value="0" oninput="izracunajRow(this)" style="width:80px;"></td>
     <td><input type="number" step="0.01" name="pdvStopa[]" value="17" oninput="izracunajRow(this)" style="width:60px;"></td>
     <td><input type="number" step="0.01" name="kolicina[]" value="1" oninput="izracunajRow(this)" style="width:60px;"></td>
     <td><input type="number" step="0.01" name="rabatProc[]" value="0" oninput="izracunajRow(this)" style="width:60px;"></td>
     <td><input type="number" step="0.01" name="iznosRabata[]" value="0" readonly style="width:80px;"></td>
     <td><input type="number" step="0.01" name="ukupnoBezPDV[]" value="0" readonly style="width:80px;"></td>
     <td><input type="number" step="0.01" name="ukupanPDV[]" value="0" readonly style="width:80px;"></td>
     <td><input type="number" step="0.01" name="ukupnoSaPDV[]" value="0" readonly style="width:80px;"></td>
     <td><button type="button" onclick="obrisiRed(this)">X</button></td>
   `;
   tbody.appendChild(tr);
}

// Kad user izabere artikal
function promjenaArtikla(sel){
   let row = sel.parentNode.parentNode;
   let tdSifra = row.querySelector('.tdSifra input');
   let tdJM = row.querySelector('.tdJM input');
   let cijenaBez = row.querySelector('[name="cijenaBezPDV[]"]');
   let sifra = sel.value;
   let a = artikliJS.find(x => x.sifra_artikla == sifra);
   if(a){
     tdSifra.value = a.sifra_artikla;
     tdJM.value = a.jed_mjere;
     cijenaBez.value = parseFloat(a.cijena).toFixed(2);
   } else {
     tdSifra.value = "";
     tdJM.value = "";
     cijenaBez.value = "0";
   }
   izracunajRow(cijenaBez);
}

// Dodaj STAVKU USLUGA
function dodajStavkuUsluga(){
   redniBroj++;
   let selectHTML = `<select onchange="promjenaUsluge(this)" style="width:140px;">
                        <option value="">--Izaberi Uslugu--</option>`;
   uslugeJS.forEach((u) => {
       selectHTML += `<option value="${u.id_usluge}" data-naziv="${u.naziv_usluge}" data-jm="${u.jed_mjere}" data-cijena="${u.cijena}">${u.naziv_usluge}</option>`;
   });
   selectHTML += '</select>';
   let tbody = document.getElementById('stavkeTable').querySelector('tbody');
   let tr = document.createElement('tr');
   tr.innerHTML = `
     <td><input type="text" value="${redniBroj}" size="2" readonly></td>
     <td class="tdSifra"><input type="text" name="sifra[]" size="8" readonly></td>
     <td class="tdNaziv">${selectHTML}</td>
     <td class="tdJM"><input type="text" name="jm[]" value="" size="4" readonly></td>
     <td><input type="number" step="0.01" name="cijenaBezPDV[]" value="0" oninput="izracunajRow(this)" style="width:80px;"></td>
     <td><input type="number" step="0.01" name="cijenaSaPDV[]" value="0" oninput="izracunajRow(this)" style="width:80px;"></td>
     <td><input type="number" step="0.01" name="pdvStopa[]" value="17" oninput="izracunajRow(this)" style="width:60px;"></td>
     <td><input type="number" step="0.01" name="kolicina[]" value="1" oninput="izracunajRow(this)" style="width:60px;"></td>
     <td><input type="number" step="0.01" name="rabatProc[]" value="0" oninput="izracunajRow(this)" style="width:60px;"></td>
     <td><input type="number" step="0.01" name="iznosRabata[]" value="0" readonly style="width:80px;"></td>
     <td><input type="number" step="0.01" name="ukupnoBezPDV[]" value="0" readonly style="width:80px;"></td>
     <td><input type="number" step="0.01" name="ukupanPDV[]" value="0" readonly style="width:80px;"></td>
     <td><input type="number" step="0.01" name="ukupnoSaPDV[]" value="0" readonly style="width:80px;"></td>
     <td><button type="button" onclick="obrisiRed(this)">X</button></td>
   `;
   tbody.appendChild(tr);
}

// Kad user izabere uslugu
function promjenaUsluge(sel){
   let row = sel.parentNode.parentNode;
   let tdSifra = row.querySelector('.tdSifra input');
   let tdJM = row.querySelector('.tdJM input');
   let cijenaBez = row.querySelector('[name="cijenaBezPDV[]"]');
   let idUsl = sel.value;
   let u = uslugeJS.find(x => x.id_usluge == idUsl);
   if(u){
     tdSifra.value = "USL-" + u.id_usluge;
     tdJM.value = u.jed_mjere;
     cijenaBez.value = parseFloat(u.cijena).toFixed(2);
   } else {
     tdSifra.value = "";
     tdJM.value = "";
     cijenaBez.value = "0";
   }
   izracunajRow(cijenaBez);
}

function obrisiRed(btn){
   let row = btn.parentNode.parentNode;
   row.parentNode.removeChild(row);
   izracunajUkupno();
}

function izracunajRow(el){
   let tr = el.parentNode.parentNode;
   let cijenaBez = parseFloat(tr.querySelector('[name="cijenaBezPDV[]"]').value) || 0;
   let cijenaSa  = parseFloat(tr.querySelector('[name="cijenaSaPDV[]"]').value) || 0;
   let pdv = parseFloat(tr.querySelector('[name="pdvStopa[]"]').value) || 0;
   let kolicina = parseFloat(tr.querySelector('[name="kolicina[]"]').value) || 0;
   let rabatP = parseFloat(tr.querySelector('[name="rabatProc[]"]').value) || 0;

   if(el.name === "cijenaSaPDV[]"){
      cijenaBez = cijenaSa / (1 + pdv/100);
      tr.querySelector('[name="cijenaBezPDV[]"]').value = cijenaBez.toFixed(2);
   } else {
      cijenaSa = cijenaBez * (1 + pdv/100);
      tr.querySelector('[name="cijenaSaPDV[]"]').value = cijenaSa.toFixed(2);
   }

   let bruto = cijenaBez * kolicina;
   let iznosRabata = bruto * (rabatP/100);
   let neto = bruto - iznosRabata;
   let iznosPDV = neto * (pdv/100);
   let ukupno = neto + iznosPDV;

   tr.querySelector('[name="iznosRabata[]"]').value = iznosRabata.toFixed(2);
   tr.querySelector('[name="ukupnoBezPDV[]"]').value = neto.toFixed(2);
   tr.querySelector('[name="ukupanPDV[]"]').value = iznosPDV.toFixed(2);
   tr.querySelector('[name="ukupnoSaPDV[]"]').value = ukupno.toFixed(2);

   izracunajUkupno();
}

function izracunajUkupno(){
   let rows = document.querySelectorAll('#stavkeTable tbody tr');
   let sumBezPDV = 0, sumRabat = 0, sumPDV = 0, sumSaPDV = 0;
   let pdvGrupa = {};

   rows.forEach((tr)=>{
      let rabatVal = parseFloat(tr.querySelector('[name="iznosRabata[]"]').value) || 0;
      let netoVal = parseFloat(tr.querySelector('[name="ukupnoBezPDV[]"]').value) || 0;
      let pdvVal = parseFloat(tr.querySelector('[name="ukupanPDV[]"]').value) || 0;
      let ukupSa = parseFloat(tr.querySelector('[name="ukupnoSaPDV[]"]').value) || 0;
      let pdvStop = parseFloat(tr.querySelector('[name="pdvStopa[]"]').value) || 0;

      sumRabat += rabatVal;
      sumBezPDV += netoVal;
      sumPDV += pdvVal;
      sumSaPDV += ukupSa;

      if(!pdvGrupa[pdvStop]){
         pdvGrupa[pdvStop] = { osnovica: 0, porez: 0, ukupno: 0 };
      }
      pdvGrupa[pdvStop].osnovica += netoVal;
      pdvGrupa[pdvStop].porez += pdvVal;
      pdvGrupa[pdvStop].ukupno += (netoVal + pdvVal);
   });

   let rekapLevoBody = document.getElementById('rekapLevoTable').querySelector('tbody');
   rekapLevoBody.innerHTML = "";
   for(let stopa in pdvGrupa){
      let o = pdvGrupa[pdvStopa = stopa];
      let tr = document.createElement('tr');
      tr.innerHTML = `
         <td>${stopa}%</td>
         <td>${o.ukupno.toFixed(2)}</td>
         <td>${o.porez.toFixed(2)}</td>
         <td>${o.osnovica.toFixed(2)}</td>
      `;
      rekapLevoBody.appendChild(tr);
   }

   document.getElementById('ukupnoBezPDV').value = sumBezPDV.toFixed(2);
   document.getElementById('ukupniRabat').value = sumRabat.toFixed(2);
   document.getElementById('iznosSaRabatomBezPDV').value = sumBezPDV.toFixed(2);
   document.getElementById('ukupniPDV').value = sumPDV.toFixed(2);
   document.getElementById('ukupnoSaPDV').value = sumSaPDV.toFixed(2);
   document.getElementById('ukupnoZaNaplatu').value = sumSaPDV.toFixed(2);
}

// Prije slanja forme, spremamo stavke kao JSON
document.getElementById('otpremnicaForm').addEventListener('submit', function(e) {
   document.getElementById('stavke').value = JSON.stringify(stavkeArray);
});
</script>

</body>
</html>

<?php
include 'footer.html';
?>
